home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Atari Compendium
/
The Atari Compendium (Toad Computers) (1994).iso
/
files
/
umich
/
telecomm
/
shadow11.arc
/
SHDWACES.S
< prev
Wrap
Text File
|
1988-10-30
|
8KB
|
212 lines
; shdw_struct(); /* C calling sequence */
;===========================
; SHDW_STRUCT
;===========================
shdw_struct:
MOVE.W #$0, -(A7) ; function number (returns pointer to shdw_rec)
TRAP #15 ; D0 contains pointer to structure on return
ADDQ.L #2, A7 ; clean up stack
RTS
; shdw_receive(buffer, length, mode); /* C calling sequence */
;===========================
; SHDW_RECEIVE
;===========================
shdw_receive:
MOVE.L 12(A6), -(A7) ; push length of buffer (length)
MOVE.L 8(A6), -(A7) ; push pointer to buffer (buffer)
MOVE.W 16(A6), -(A7) ; push transfer option (mode)
MOVE.W #$1, -(A7) ; push function number
TRAP #15
ADDA.L #$c, A7 ; clean up stack
RTS
; shdw_send(buffer, length, mode); /* C calling sequence */
;===========================
; SHDW_SEND
;===========================
shdw_send:
MOVE.L 12(A6), -(A7) ; push length of file to send (moot for batch)
MOVE.L 8(A6), -(A7) ; push pointer to buffer
MOVE.W 16(A6), -(A7) ; push transfer option
MOVE.W #$2, -(A7) ; push function number
TRAP #15
ADDA.L #$c, A7 ; clean up stack
RTS
; shdw_abort(); /* C calling sequence */
;===========================
; SHDW_ABORT
;===========================
shdw_abort:
MOVE.W #$3, -(A7) ; function number (abort all transfers)
TRAP #15
ADDQ.L #2, A7 ; clean up stack
RTS
; shdw_digits(); /* C calling sequence */
;===========================
; SHDW_DIGITS
;===========================
shdw_digits:
MOVE.W #$4, -(A7) ; function number (turn on on-screen count)
TRAP #15
ADDQ.L #2, A7 ; clean up stack
RTS
; shdw_nodigits(); /* C calling sequence */
;===========================
; SHDW_NODIGITS
;===========================
shdw_nodigits:
MOVE.W #$5, -(A7) ; function number (turn off on-screen count)
TRAP #15
ADDQ.L #2, A7 ; clean up stack
RTS
; shdw_bell(); /* C calling sequence */
;===========================
; SHDW_BELL
;===========================
shdw_bell:
MOVE.W #$6, -(A7) ; function number (turn on completion bell)
TRAP #15
ADDQ.L #2, A7 ; clean up stack
RTS
; shdw_nobell(); /* C calling sequence */
;===========================
; SHDW_NOBELL
;===========================
shdw_nobell:
MOVE.W #$7, -(A7) ; function number (turn off completion bell)
TRAP #15
ADDQ.L #2, A7 ; clean up stack
RTS
; shdw_init(); /* C calling sequence */
;===========================
; SHDW_INIT
;===========================
shdw_init:
MOVE.W #$8, -(A7) ; function number (call to restart or init)
TRAP #15 ; this function is not needed by user!
ADDQ.L #2, A7 ; clean up stack
RTS
; shdw_dial(number, connect, fail1, fail2); /* C calling sequence */
;===========================
; SHDW_DIAL
;===========================
shdw_dial: ; dial a number in background
MOVE.L 20(A6), -(A7) ; fail2 string
MOVE.L 16(A6), -(A7) ; fail1 string
MOVE.L 12(A6), -(A7) ; connect string
MOVE.L 8(A6), -(A7) ; number string (pass zero here to abort)
MOVE.W #$9, -(A7) ; function number
TRAP #15
ADDA.L #$12, A7 ; clean up stack
RTS
; shdw_check(); /* C calling sequence */
;===========================
; SHDW_CHECK
;===========================
shdw_check: ; this function checks for Shadow's presence
CLR.L -(A7) ; must execute this code in
MOVE.W #$20, -(A7) ; Supervisor mode
TRAP #1 ; GEMDOS
ADDQ.L #6, A7 ; pop stack
CLR.L D2 ; set to fail status
MOVEA.L $42e, A0 ; get phys_top
CMPA.L #$400000, A0 ; is it 4 meg boundary?
BEQ.B nxtck ; yep, check for NON RESET PROOF mode
CMPI.W #$dc, (A0) ; does phys_top point to #$00DC (magic number)?
BNE.B nxtck ; nope, check for NON RESET PROOF handler
MOVE.L #2, D2 ; set status for NON RESET PROOF mode
; shadow clears buffer pointer and length
; automatically when in NON RESET PROOF mode
; with RAMdisk installed
TST.L 2(A0) ; is transfer buffer allocated?
BEQ.B leave ; nope, bye
MOVE.L #3, D2 ; set status to indicate installed with buffer
; and rez change when in NON RESET PROOF mode
CMPA.L 16(A0), A0 ; is buffer below phys_top?
BGT.B leave ; yes, must be NON RESET PROOF w/rez change
MOVE.L #1, D2 ; RESET PROOF SHADOW is here, return 1
BRA.B leave ;
nxtck:
MOVE.L $bc, A0 ; get trap #15 vector
SUBA.L #22, A0 ; get pointer to start of SHADOW rec
CMPI.W #$dc, (A0) ; is it magic?
BNE.B leave ; nope, nothing installed
MOVE.L #3, D2 ; set status to indicate installed with buffer
; and rez change when in NON RESET PROOF mode
TST.L 2(A0) ; buffer allocated?
BEQ.B leave ; yes, definitely a rez change
MOVE.L #2, D2 ; nope, must be a reset in NON RESET PROOF mode
; and just started or buffer not allocated yet
leave:
MOVE.L D0, -(A7) ; leave supervisor mode
MOVE.W #$20, -(A7)
TRAP #1
ADDQ.L #6, A7
MOVE.L D2, D0 ; return status
; 1 = RESET PROOF
; 2 = NON RESET PROOF with no transfer buffer
; 3 = NON RESET PROOF with transfer buffer
RTS
; shdw_timeout(seconds); /* C calling sequence */
;===========================
; SHDW_TIMEOUT
;===========================
shdw_timeout:
MOVE.W 8(A6),-(A7) ; push time in seconds or -1 for current timeout
MOVE.W #10,-(A7) ; peform SHADOW function #10
TRAP #15 ; call it
ADDQ.L #4, A7 ; fix up stack
RTS ; returns current timeout seconds (if passed -1)
; or current timeout multiplied by 60
; if passed positive values
; shdw_version(); /* C calling sequence */
;===========================
; SHDW_VERSION
;===========================
shdw_version:
MOVE.W #11,-(A7) ; perform SHADOW function #11
TRAP #15 ; call it
ADDQ.L #2, A7 ; fix up stack
RTS ; returns an integer value equal to the current
; handler version number, ie 110 = v 1.10
; old handlers will return the function # (11)
; shdw_location(x,y); /* C calling sequence */
;===========================
; SHDW_LOCATION
;===========================
shdw_location:
MOVE.W 10(A6), -(A7) ; push y in character coordinates
MOVE.W 8(A6), -(A7) ; push x in character coordinates
; or -1 for current location
; x returned in D0, y returned in D1
MOVE.W #12, -(A7) ; function number
TRAP #15 ; do it
ADDQ.L #6, -(A7) ; fix up stack
RTS
; shdw_set_values(length, buffer); /* C calling sequence */
;===========================
; SHDW_SET_VALUES
;===========================
MOVE.L $bc, A0 ; get trap #15 vector
SUBA.L #22, A0 ; point to start of SHADOW rec
MOVE.L 8(A6), 2(A0) ; store length of transfer buffer
MOVE.L 12(A6), 16(A0) ; store pointer to transfer buffer
RTS ; use this call to store info about transfer